<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
*/

/**
 * Является связкой между хранилищем и базой данных
 * Используется внутри формы VA_Form_Form чтобы отобразить список файлов, которые
 * загружены и могут быть удалены
 *
 * @author chaporgin_a
 */
class VA_Form_File_TemporaryFile {
    /**
     *
     * @var VA_Form_File_Storage хранилище в котором расположен файл
     */
    private $storage;
    /**
     *
     * @var string указатель на файл, используемый для общения с хранилищем
     */
    private $pointer;
    /**
     *
     * @var string публичная строка, которая публикуется элементами формы на странице и доступна пользователям
     */
    private $id;
    /**
     *
     * @var string имя файла которое может быть опубликовано элементами формы
     */
    private $filename;
    /**
     *
     * @var boolean TRUE означает  что над файлами можно производить какие-нибудь действия
     */
    private $active = TRUE;
    public function __construct(VA_Form_File_Storage $storage, $pointer, $publicId, $filename = null) {
        if(null === $storage) throw new Exception('storage cant be null');
        if(null === $pointer) throw new Exception('pointer cant be null');
        $this->storage = $storage;
        $this->pointer = $pointer;
        $this->id = $publicId;
        if(null === $filename)
            $this->filename = $storage->beautifyFileName($pointer);
        else $this->filename = $filename;
    }
    public function remove() {
        if(!$this->active) return FALSE;
        return $this->storage->Remove($this->pointer);
    }
    public function getFilename() {
        if(!$this->active) return null;
        return $this->filename;
    }
    public function getPublicId() {
        if(!$this->active) return null;
        return $this->id;
    }
    public function getPointer() {
        return $this->pointer;
    }
    public function getStorage() {
        return $this->storage;
    }
    public function __toString() {
        return $this->getPointer();
    }
}
?>
